<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>AngelScript: Registering a generic handle type</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>


</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">AngelScript
   
   </div>
   
  </td>
  
  
  
   
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.5.1 -->
</div>
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
  initNavTree('doc_adv_generic_handle.html','');
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<div class="title">Registering a generic handle type </div>  </div>
</div>
<div class="contents">
<div class="textblock"><p>Sometimes it is useful to be able to take a reference to an object without having to force specific implementation on the object, e.g. when providing a generic storage class to scripts, or providing a generic messaging system.</p>
<p>In AngelScript there is no common denominator for all object types, the reaons for this is that script classes and application registered classes have completely different implementation and cannot be generalized under a single superclass.</p>
<p>Instead, AngelScript provides an alternative by allowing the application to register a generic handle type. This type would be implemented according to the application's needs, but to the script it would look like it was a generic <a class="el" href="doc_script_handle.html">handle</a> that can reference any reference type. With this the type will be able to hold objects, <a class="el" href="doc_datatypes_funcptr.html">functions</a>, and <a class="el" href="doc_addon_array.html">arrays</a>.</p>
<p>To register the generic handle type, the application should follow the same principles as for a <a class="el" href="doc_register_val_type.html">value type</a>, except for a few details, that will be described here.</p>
<ul>
<li>The type must be registered with the additional flag <a class="el" href="angelscript_8h.html#a855d86fa9ee15b9f75e553ee376b5c7aadf3d1f30658e593f48c5c5f542ac4845">asOBJ_ASHANDLE</a>. This is the flag that tells AngelScript that the type simulates a generic handle.</li>
</ul>
<ul>
<li>In order to allow assigning any handle to the type, the <a class="el" href="doc_script_class_ops.html">opAssign</a> method must be registered with a <a class="el" href="doc_adv_var_type.html">variable paramater type</a>, e.g. 'ref &amp;opAssign(const ?&amp;in)'.</li>
</ul>
<ul>
<li>The <a class="el" href="doc_script_class_ops.html">opEquals</a> method must also be registered with a <a class="el" href="doc_adv_var_type.html">The variable parameter type</a> in order to allow the is and !is operators to behave as expected for a handle, e.g. 'bool opEquals(const ?&amp;in)'.</li>
</ul>
<ul>
<li>Finally the <a class="el" href="angelscript_8h.html#a7e38df5b10ec8cbf2a688f1d114097c5a20746394824509f369f860ea1e96d1f6">asBEHAVE_REF_CAST</a> behaviour must be registered with the signature 'void f(?&amp;out)' in order to allow a dynamic cast to any other type.</li>
</ul>
<p>As this is a quite useful type, with really very little need for customization, a standard add-on with this implementation has been provided with the SDK.</p>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="doc_addon_handle.html">ref object</a> </dd></dl>
</div></div>
</div>
  <div id="nav-path" class="navpath">
    <ul>

    <li class="footer">Generated on Sun Jan 29 2012 15:41:03 for AngelScript by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.5.1 </li>
   </ul>
 </div>


</body>
</html>
